#if !defined(IDIRECT3D_APPLICATION_H_72A06DE1_39A6_4CF0_B994_EFC0841F8974)
#define IDIRECT3D_APPLICATION_H_72A06DE1_39A6_4CF0_B994_EFC0841F8974

class IDirect3D9Support;
class IDirect3D10Support;

class IDirect3DApplication
{
public:
	virtual ~IDirect3DApplication() { }

	virtual void OnFrameMove(double fTime, float fElapsedTime) = 0;
	virtual void OnKeyboard(UINT nChar, bool bKeyDown, bool bAltDown) = 0;
	virtual void OnMouse(bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown,
                       bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta,
                       int xPos, int yPos) = 0;
	virtual LRESULT MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing) = 0;
	virtual bool ModifyDeviceSettings(DXUTDeviceSettings* pDeviceSettings) = 0;
	virtual bool OnDeviceRemoved() = 0;
	virtual IDirect3D9Support *GetDirect3D9Support() const = 0;
	virtual IDirect3D10Support *GetDirect3D10Support() const = 0;
};

#endif

